// 单元格点击
// 1 获取所有的单元格列表
var cells = document.querySelectorAll('.cell');
//获取游戏面板
var bord = document.querySelector('#bord');
//获取获胜信息面板
var message = document.querySelector('#message');
// 获取获胜信息文本元素
var winner = document.querySelector('#winner');
//判赢数组
var winsArr = [
    [0, 1, 2], [3, 4, 5], [6, 7, 8],
    [0, 3, 6], [1, 4, 7], [2, 5, 8],
    [0, 4, 8], [2, 4, 6]
];
//获取重新开始按钮元素
var restart = document.querySelector('#restart');
//定义记录点击次数
var steps;
//设置枚举类型
var Player;
(function (Player) {
    Player["X"] = "x";
    Player["O"] = "o";
})(Player || (Player = {}));
var currentPlayer;
// 2 遍历单元格列表，给每个单元格添加点击事件
// cells.forEach(function (item){
//   let cell = item as HTMLDivElement;
//   cell.addEventListener('click',clickCell,{once:true})
// })
startGame();
// 点击事件函数
function clickCell(event) {
    var target = event.target;
    target.classList.add(currentPlayer);
    //点击次数加一
    steps++;
    //调用判赢函数获取判赢结果
    var isWin = checkWin(currentPlayer);
    // 判断结果
    if (isWin) {
        message.style.display = 'block';
        winner.innerText = currentPlayer + '赢了！';
        return;
    }
    //当点击次数为9,并且没有产生胜利,此时为平局
    if (steps === 9) {
        message.style.display = 'block';
        winner.innerText = '平局';
        return;
    }
    // 是否切换玩家
    currentPlayer = currentPlayer === Player.X ? Player.O : Player.X;
    //下一步提示信息
    bord.classList.remove(Player.X, Player.O);
    bord.classList.add(currentPlayer);
}
// 封装判赢函数
function checkWin(player) {
    // 获取每种获胜情况
    return winsArr.some(function (item) {
        // 获取每种获胜情况对应的3个单元格元素
        var cell1 = cells[item[0]];
        var cell2 = cells[item[1]];
        var cell3 = cells[item[2]];
        // 判断三个单元格是否同时包含相同的类名
        if (hasClass(cell1, player) &&
            hasClass(cell2, player) &&
            hasClass(cell3, player)) {
            return true;
        }
        return false;
    });
}
// 封装判断指定元素是否包含指定类名
function hasClass(el, name) {
    return el.classList.contains(name);
}
// 重新开始
restart.addEventListener('click', startGame);
// 重新开始回调函数
function startGame() {
    // 隐藏获胜信息
    message.style.display = 'none';
    // 重置下棋次数
    steps = 0;
    //重置默认玩家为x
    currentPlayer = Player.X;
    // 重置下棋提示为x
    bord.classList.remove(Player.X, Player.O);
    bord.classList.add(Player.X);
    // 遍历棋盘元素
    cells.forEach(function (item) {
        var cell = item;
        // 清空棋盘
        cell.classList.remove(Player.X, Player.O);
        // 移除单元格单击事件，重新绑定单击事件
        cell.removeEventListener('click', clickCell);
        cell.addEventListener('click', clickCell, { once: true });
    });
}
